diff --git a/tests/codeigniter/libraries/Encrypt_test.php b/tests/codeigniter/libraries/Encrypt_test.php
new file mode 100644
index 0000000..0669901
--- /dev/null
+++ b/tests/codeigniter/libraries/Encrypt_test.php
@@ -0,0 +1,71 @@
+<?php
+
+class Encrypt_test extends CI_TestCase {
+
+  public function set_up()
+  {
+    $obj = new StdClass;
+    $obj->encrypt = new Mock_Libraries_Encrypt();
+    
+    $this->ci_instance($obj);
+    $this->encrypt = $obj->encrypt;
+
+    $this->ci_set_config('encryption_key', "Encryptin'glike@boss!");
+    $this->msg = 'My secret message';
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_encode()
+  {
+    $this->assertNotEquals($this->msg, $this->encrypt->encode($this->msg));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_decode()
+  {
+    $encoded_msg = $this->encrypt->encode($this->msg);
+    $this->assertEquals($this->msg, $this->encrypt->decode($encoded_msg));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_optional_key()
+  {
+    $key = 'Ohai!ù0129°03182%HD1892P0';
+    $encoded_msg = $this->encrypt->encode($this->msg, $key);
+    $this->assertEquals($this->msg, $this->encrypt->decode($encoded_msg, $key));
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_default_cipher()
+  {
+    $this->assertEquals('rijndael-256', $this->encrypt->get_cipher());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_set_cipher()
+  {
+    $this->encrypt->set_cipher(MCRYPT_BLOWFISH);
+    $this->assertEquals('blowfish', $this->encrypt->get_cipher());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_default_mode()
+  {
+    $this->assertEquals('cbc', $this->encrypt->get_mode());
+  }
+
+  // --------------------------------------------------------------------
+
+  public function test_set_mode()
+  {
+    $this->encrypt->set_mode(MCRYPT_MODE_CFB);
+    $this->assertEquals('cfb', $this->encrypt->get_mode());
+  }
+
+}
\ No newline at end of file
